/**
 * 
 */
package org.swing.utility.system.url;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;

/**
 * @author lqnhu
 *
 */
public final class PathURLConnection extends URLConnection {
	private final Path path;

	public PathURLConnection(URL url, Path path) {
		super(url);
		this.path = path;
	}

	@Override
	public void connect() throws IOException {
		// nothing to do
	}

	@Override
	public long getContentLengthLong() {
		try {
			return Files.size(this.path);
		} catch (IOException e) {
			throw new RuntimeException("could not get size of: " + this.path, e);
		}
	}

	@Override
	public InputStream getInputStream() throws IOException {
		return Files.newInputStream(this.path);
	}

	@Override
	public OutputStream getOutputStream() throws IOException {
		return Files.newOutputStream(this.path);
	}

	@Override
	public String getContentType() {
		try {
			return Files.probeContentType(this.path);
		} catch (IOException e) {
			throw new RuntimeException("could not get content type of: "
					+ this.path, e);
		}
	}

	@Override
	public long getLastModified() {
		try {
			BasicFileAttributes attributes = Files.readAttributes(this.path,
					BasicFileAttributes.class);
			return attributes.lastModifiedTime().toMillis();
		} catch (IOException e) {
			throw new RuntimeException("could not get last modified time of: "
					+ this.path, e);
		}
	}
}
